import type { InfoGroupApi } from '#/api/spa/group';

import { acceptHMRUpdate, defineStore } from 'pinia';

interface GroupSwitchState {
  /**
   * 当前选中的集团信息
   */
  currentGroup: InfoGroupApi.InfoGroup | null;
  /**
   * 是否显示集团切换弹窗
   */
  showSwitchModal: boolean;
}

/**
 * 集团切换管理
 */
export const useGroupSwitchStore = defineStore('group-switch', {
  actions: {
    /**
     * 设置当前集团
     */
    setCurrentGroup(group: InfoGroupApi.InfoGroup) {
      this.currentGroup = group;
    },

    /**
     * 获取当前集团
     */
    getCurrentGroup(): InfoGroupApi.InfoGroup | null {
      return this.currentGroup;
    },

    /**
     * 获取当前集团ID
     */
    getCurrentGroupId(): null | number {
      return this.currentGroup?.id || null;
    },

    /**
     * 获取当前集团名称
     */
    getCurrentGroupName(): string {
      return this.currentGroup?.groupName || '未选择集团';
    },

    /**
     * 显示集团切换弹窗
     */
    showModal() {
      this.showSwitchModal = true;
    },

    /**
     * 隐藏集团切换弹窗
     */
    hideModal() {
      this.showSwitchModal = false;
    },

    /**
     * 切换集团
     */
    switchGroup(group: InfoGroupApi.InfoGroup) {
      this.setCurrentGroup(group);
      this.hideModal();
    },

    /**
     * 清除当前集团
     */
    clearCurrentGroup() {
      this.currentGroup = null;
    },
  },
  persist: {
    // 持久化存储当前集团信息
    pick: ['currentGroup'],
  },
  state: (): GroupSwitchState => ({
    currentGroup: null,
    showSwitchModal: false,
  }),
});

// 解决热更新问题
const hot = import.meta.hot;
if (hot) {
  hot.accept(acceptHMRUpdate(useGroupSwitchStore, hot));
}
